#ifndef ROADSPAGE_H
#define ROADSPAGE_H

#include <QWidget>
#include "types.h"
class QGridLayout;
class QVBoxLayout;
class QHBoxLayout;
class QLabel;
class QSlider;
class QSpinBox;
class QCheckBox;
class QComboBox;

/*! \class RoadsPage
    \brief Zakładka w opcjach okienkowych odpowiedzialna za ustawienia dotyczące ulic na rondzie.

    Zakładka jest tworzona w konstruktorze klasy Options::Options().
    Umożliwia wybór liczby gałęzi na rondzie z zakresu <2,10> za pomocą QSpinBoxa lub QSlidera,
    a następnie ustawić odpowiednie właściwości dla tych gałęzi.
    Wśród tych właściwości jest możliwość ustawiania:
    <ul>
    <li>czy dana gałąź ma być wjazdem, czy zjazdem;</li>
    <li>liczby pasów - z zakresu <1,maksymalna liczba pasów>, gdzie maksymalna liczba pasów jest równa RoadsPage::_liczbaPasowRondo ;</li>
    <li>czy dana gałąź ma posiadać pasy dla ruchu pieszych, czy nie;</li>
    <li>Zależność - przedstawiająca sposób połączenia z kolejną gałęzią. Do wyboru mamy rozłączona(domyślna wartość), sklejona oraz "ma skrót".</li>
    </ul>

    Właściwości te są generowane dynamicznie w zależności od ustawianej liczby gałęzi.
    Zapisywane są tymczasowe opcje właściwości, w związku z tym zmiana ilości gałęzi nie zmienia tymczasowych ustawień właściwości.
*/
class RoadsPage : public QWidget
{
    Q_OBJECT
public:
    RoadsPage(QWidget *parent = 0, int numLanesOnBranch = 2);
    void saveRoadsSettings();
    void readRoadsSettings();
    int getNumBranches();
    Direction getBranchDirection(int);
    Dependence getBranchDependence(int);

public slots:
    void changeNumBranches(int newNumBranches);
    void changeDependences(int newDependence);
    void changeDirection(int);
    void changeNumLanesFromRoadPages(int);
    void checkEntryOutlet(); //sprawdza czy istnieje choć jeden zjazd i choć jeden wjazd
signals:
    void changeNumBranchesForTram(int newNumBranches); /*!< Sygnał informujący o zmianie liczby gałęzi. Odbierany przez klasy: TramsPage oraz IntensityPedestrian */
    void directionChanged(int ind); /*!< \param ind numer gałęzi, w której zaszła zmiana kierunku.

                                        Sygnał informujący o zmianie kierunku gałęzi. Odbierany przez klasę TramsPage. */

private:
    void configureRoadsPage();
    void createBranchProperties(int num);
    void createNumBranchesWidgets();
    void deleteBranchProperties();
    void usunSklejona(int i);
    void dodajSklejona(int i);
    void saveTmpSettings(); //sluzy do odtworzenia poprzednich wartości gałęzi
    void readTmpSettings(); //sluzy do odtworzenia poprzednich wartości gałęzi
    int _ileGaleziStworzonych; /*!< Zmienna pomocnicza informująca o liczbie gałęzi ustawianych w opcjach. Inicjalizowana w konstruktorze i modyfikowana w: RoadsPage::createBranchProperties(),  RoadsPage::changeNumBranches() i RoadsPage::readRoadsSettings().*/
    int _liczbaPasowRondo; /*!< Liczba pasów na obręczy ronda. Wartość ustawiana w konstruktorze i ewentualnie modyfikowana w RoadsPage::changeNumLanesFromRoadPages() */
    int _prevNumBranches; /*!< Tymczasowa liczba gałęzi zapisywana przed zmianami użytkownika.
Zmiana wartości tego pola jest dokonywana za każdym razem, gdy zostanie wykryta zmiana liczby gałęzi, ale update'owana jest
dopiero PO zapisaniu ustawień (jako prawie ostatni krok obsługi kliknięcia QSpinBoxa lub przesunięcia QSlidera). Dzięki temu podczas obsługi mamy dostęp
do liczby gałęzi, jaka była zanim user ją zmienił. */

    QVBoxLayout *_mainLayout; /*!< Główny layout zakładki. Pionowy. */
    QLabel *_wjazdZjazdLabel; /*!< Etykieta opisująca kolumnę wjazdów/zjazdów. */
    QLabel *_liczbaPasowLabel; /*!< Etykieta opisująca kolumnę liczby pasów. */
    QLabel *_czyPasyLabel; /*!< Etykieta opisująca kolumnę QCheckBoxów umożliwiających rysowanie pasów dla pieszych. */
    QLabel *_zaleznoscLabel; /*!< Etykieta opisująca kolumnę zależności. */

    QLabel *_liczbaGaleziLabel; /*!< Etykieta opisująca liczbę gałęzi.*/
    QSpinBox *_liczbaGaleziSpinBox; /*!< Liczba gałęzi na rondzie w postaci QSpinBoxa.*/
    QSlider *_liczbacGaleziSlider; /*!< Liczba gałęzi na rondzie w postaci QSlidera. */
    QHBoxLayout *_liczbaGaleziLayout; /*!< Pionowy layout pod widgety dotyczące liczby gałęzi. */

    QGridLayout *_galezieLayout; /*!< Layout pod dynamicznie generowane właściwości gałęzi. */
    QList <QLabel*> _galazLabel; /*!< Lista etykiet dla gałęzi. Wykorzystywana przy właściwościach gałęzi. Numerowana od zera.*/
    QList <QComboBox*> _kierunekGaleziComboBox; /*!< Lista rozwijanych list dla gałęzi przedstawiających kierunek gałęzi (wjazd/zjazd). Wykorzystywana przy właściwościach. */
    QList <QSpinBox*> _liczbaPasowSpinBox; /*!< Lista QSpinBoxów dla gałęzi określiająca liczbę pasów na danej gałęzi. Wykorzystywana przy właściwościach gałęzi. */
    QList <QComboBox*> _zaleznoscComboBox; /*!< Lista rozwijanych list dla gałęzi przedstawiających zależność między ulicami. Wykorzystywana przy właściwościach gałęzi. */
    QList <QLabel*> _galaz2Label; /*!< Lista etykiet dla gałęzi. Informuje z którą gałęzią połączona jest i-ta gałąź. Przyjmuje zawsze wartość o jeden wyższą niż RoadsPage::_galazLabel, chyba że jest ostatnią - wtedy zero. */
    QList <QCheckBox*> _czyPasyCheckBox; /*!< Lista QCheckBoxów umożliwiających ustawienie rysowania przejścia dla pieszych na danej gałęzi.*/

};

#endif // ROADSPAGE_H
